____ _ _ _ _
| _ \ ___ | |_ (_) _ __ ___ __| | (_) __ _
| |_) | / _ \ | __| | | | '_ \ / _ \ / _| | | | / _ |
| _ < | __/ | |_ | | | |_) | | __/ | (_| | | | | (_| |
|_| \_\ \___| \__| |_| | .__/ \___| \__,_| |_| \__,_|
|_|
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―
Move to front
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
top
Move to front (englisch βNach vorne verschiebenβ, auch: Rotierende Kodierung) ist ein Kodierungsverfahren, das sich gut eignet, um Daten, die aus der Burrows-Wheeler-Transformation stammen, weiterzuverarbeiten, um sie anschlieΓend effektiver komprimieren zu kΓΆnnen.
Contents
β’ Funktionsweise
β’ Beispiel
β’ Literatur
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Format der Ein- und Ausgabedaten
Die Ausgabe von Move-to-Front ist eine Folge natΓΌrlicher Zahlen, wobei jede der Zahlen kleiner als die LΓ€nge des Alphabets ist.
Funktionsweise
Move-to-Front-Kodierung:
1. Schreibe das komplette Alphabet in eine Zeichenkette a.
2. FΓΌr jedes Zeichen z der Eingabe:
1. Gib die Position von z in a aus.
2. Entferne z aus a und fΓΌge es vorne wieder an.
Dieser Ablauf fΓΌhrt dazu, dass Zeichen, die hΓ€ufig in der Eingabe vorkommen, wΓ€hrend der Kodierung relativ weit vorne im Alphabet a stehen. Dadurch wiederum enthΓ€lt die Ausgabe mehr kleine Zahlen als groΓe, und das wiederum ist nΓΌtzlich, um die Zahlenfolge anschlieΓend zu komprimieren, etwa mit der Huffman-Kodierung.
Move-to-Front-Dekodierung:
1. Schreibe das komplette Alphabet in eine Zeichenkette a.
2. FΓΌr jede Zahl z der Eingabe:
1. Gib das Zeichen an der Position z von a aus.
2. Entferne dieses Zeichen aus a und fΓΌge es vorne wieder an.
Die Dekodierung funktioniert fast genauso wie die Kodierung, nur dass die Position, an der das Alphabet geΓ€ndert wird, schon bekannt ist (die Zahl aus der Eingabe), wΓ€hrend sie bei der Kodierung erst bestimmt werden muss.
Beispiel
Die Zeichenkette βMississippiβ soll mit dem MTF-Algorithmus kodiert werden. Das Alphabet, das dabei verwendet wird, sei (der KΓΌrze wegen) βABCIMPSabcimpsβ.
In der folgenden Tabelle ist Zeichen jeweils das Eingabezeichen, Alphabet das aktuelle Alphabet. Die Ausgabe ist die Position des Zeichens im aktuellen Alphabet (beginnend mit 0), und Alphabet' ist das neue Alphabet, das dadurch entsteht, dass das Eingabezeichen an den Anfang verschoben wird.
| Zeichen | Alphabet | Ausgabe | Alphabet' |
|---|---|---|---|
| M | ABCIMPSabcimps | 4 | MABCIPSabcimps |
| i | MABCIPSabcimps | 10 | iMABCIPSabcmps |
| s | iMABCIPSabcmps | 13 | siMABCIPSabcmp |
| s | siMABCIPSabcmp | 0 | siMABCIPSabcmp |
| i | siMABCIPSabcmp | 1 | isMABCIPSabcmp |
| s | isMABCIPSabcmp | 1 | siMABCIPSabcmp |
| s | siMABCIPSabcmp | 0 | siMABCIPSabcmp |
| i | siMABCIPSabcmp | 1 | isMABCIPSabcmp |
| p | isMABCIPSabcmp | 13 | pisMABCIPSabcm |
| p | pisMABCIPSabcm | 0 | pisMABCIPSabcm |
| i | pisMABCIPSabcm | 1 | ipsMABCIPSabcm |
Das Ergebnis der Kodierung ist der Text (4,10,13,0,1,1,0,1,13,0,1). Wenn man die Umsortierung des Alphabets weglΓ€sst, erhΓ€lt man zum Vergleich den Text (4,10,13,13,10,13,13,10,12,12,10). Man kann daran sehen, dass nach einer kurzen βEinarbeitungsphaseβ (hier 3 Zeichen lang: 4,10,13) relativ hΓ€ufig kleine Zahlen ausgegeben werden, was gut fΓΌr eine anschlieΓende Komprimierung ist.
Um MTF wieder zu dekodieren, geht man den umgekehrten Weg:
Die Zahlenfolge (4,10,13,0,1,1,0,1,13,0,1) soll unter Verwendung des Alphabets βABCIMPSabcimpsβ dekodiert werden. In der folgenden Tabelle ist Position die Zahl aus der zu dekodierenden Zahlenfolge und Zeichen das dekodierte Zeichen. Die Spalten Alphabet und Alphabet' sind genau die gleichen wie in der Kodiertabelle oben.
| Position | Alphabet | Zeichen | Alphabet' |
|---|---|---|---|
| 4 | ABCIMPSabcimps | M | MABCIPSabcimps |
| 10 | MABCIPSabcimps | i | iMABCIPSabcmps |
| 13 | iMABCIPSabcmps | s | siMABCIPSabcmp |
| 0 | siMABCIPSabcmp | s | siMABCIPSabcmp |
| 1 | siMABCIPSabcmp | i | isMABCIPSabcmp |
| 1 | isMABCIPSabcmp | s | siMABCIPSabcmp |
| 0 | siMABCIPSabcmp | s | siMABCIPSabcmp |
| 1 | siMABCIPSabcmp | i | isMABCIPSabcmp |
| 13 | isMABCIPSabcmp | p | pisMABCIPSabcm |
| 0 | pisMABCIPSabcm | p | pisMABCIPSabcm |
| 1 | pisMABCIPSabcm | i | ipsMABCIPSabcm |
Die Ausgabe der Dekodierung ist also wie erwartet βMississippiβ.
Literatur
β’ Packen wie noch nie. In: cβt Magazin fΓΌr Computer Technik. Nr. 16. Verlag Heinz Heise, 2000, ISSN 0724-8679, S. 194.